/*
  购物车功能分析：
    * 加入购物车：添加信息到本地 (详情页) -ok
      * 判断是否含有该商品
        * 没有商品：新增一条数据
        * 有这个商品：修改这个商品的数量
    * 显示购物车数据(购物车页)
      * 布局：vantUI-weapp - ok
      * 样式 -ok
      * 获取本地数据渲染页面 -ok
    * 单选、全选、反选(购物车页) -ok
    * 统计：总价、总数量(购物车页) -ok
    * 数量加减(购物车页) -ok
    * 删除某个商品(购物车页) -ok
    * 加入订单：跳到订单页
    
  购物车数据存储：
    * 数据存在本地：没有登陆，点击结算就让用户登陆，把本地数据转存到数据库(选这种做法)
    * 数据存到数据库：加入购物车必须要登陆
  
  存数据到本地：数据的存储结构
    [{
      gid : 商品id,
      gtitle : 商品标题,
      gprice : 商品价格,
      gnum : 商品数量,
      gimgurl : 商品缩略图,
      gchecked : true 是否要购买：复选框的状态
    }]
*/
//封装一个类库，里面全部是购物车相关的功能
class shopCtrl {
  getCartData() {
    return wx.getStorageSync('cartData') || [];
  }
  setCartData(data) {
    wx.setStorageSync('cartData', data);
  }
  addCardData(goodinfo) {
    // 1.取出本地数据
    let goodsList = this.getCartData();
    // 2.判断是否有这个数据
    let selIndex = this.isExist(goodinfo.gid);
    if (selIndex == -1) {
      goodsList.push(goodinfo);
    } else {
      goodsList[selIndex].gnum = Number(goodsList[selIndex].gnum) + Number(goodinfo.gnum);
    }
    // 3.存储数据
    this.setCartData(goodsList);
  }
  isExist(gid) {
    // 1.取出数据
    let goodsList = this.getCartData();
    // 2.循环比较
    for (let index = 0; index < goodsList.length; index++) {
      if (goodsList[index].gid == gid) {
        // 相等==存在，返回下标
        return index;
      }
    }
    // 不相等==不存在，返回-1
    return -1;
  }
  selOneGood(gid) {
    //1.取出本地存储数据
    let goodsList = this.getCartData();
    //2.判断你要改的数据是第几条
    let selIndex = this.isExist(gid); //下标
    //3.直接修改这一天的选中状态
    goodsList[selIndex].gchecked = !goodsList[selIndex].gchecked;
    //4.把数据存回本地存储
    this.setCartData(goodsList);
    //5.单选控制全选：联动效果
    let selsAll = goodsList.every(item => {
      return item.gchecked;
    });
    return selsAll;
  }
  selAll(status) {
    // 1.取出本地储存数据
    let goodsList = this.getCartData();
    //2.遍历数组，让数组的状态都改变
    goodsList.forEach(item => {
      item.gchecked = status;
    });
    //3.把数据存回本地存储
    this.setCartData(goodsList);
  }
  getPriceCount() {
    let goodsList = this.getCartData();
    let price = 0;
    let total = 0;
    goodsList.forEach(item => {
      if (item.gchecked) {
        total += item.gnum;
        price += item.gprice * item.gnum;
      }
    });
    return {total,price}
  }
  addGoodNum(gid){
    // 1.取出本地储存数据
    let goodsList = this.getCartData();
    //2.判断你要改的数据是第几条
    let selIndex = this.isExist(gid); //下标
    if(goodsList[selIndex].gnum < 9){
      goodsList[selIndex].gnum += 1;
    }
    //3.把数据存回本地存储
    this.setCartData(goodsList);
  }
  cutGoodNum(gid){
    // 1.取出本地储存数据
    let goodsList = this.getCartData();
    //2.判断你要改的数据是第几条
    let selIndex = this.isExist(gid); //下标
    if(goodsList[selIndex].gnum > 1){
      goodsList[selIndex].gnum -= 1;
    }
    //3.把数据存回本地存储
    this.setCartData(goodsList);
  }
  delect(gid) {
    //1.取出本地存储数据
    let goodsList = this.getCartData();
    //2.删除数组里面和传入的gid一样的那条数据
    let result = goodsList.filter(item => {
      return item.gid != gid;
    });
    //3.把数据存回本地存储
    this.setCartData(result);
  }
  getSelectGoodS(){
    let goodslist = this.getCartData();
    let result = goodslist.filter(item =>{
      return item.gchecked; 
    });
    return result;
  }
  rmOrderGoods(){
    let goodsList =this.getCartData();
    let result = goodsList.filter(item =>{
      return item.gchecked == false;
    });
    this.setCartData(result);
  }
}

module.exports = new shopCtrl();